<?php

/* * ************************************************************************* 
 * application.class.php
 * Encoding : UTF-8
 * Desc. :SPIDER应用程序创建类
 * Created on : 2013-4-23 10:45:07 by Aiden , aiden.ke@doosnet.net
 * Updated on : 2013-4-23 10:45:07 by Aiden , aiden.ke@doosnet.net
 * ************************************************************************* */
defined('IN_SPIDER') or exit('No permission resources.');
class application {

    /**
     * 构造函数
     */
    public function __construct() {
        $param = pc_base::load_sys_class('param');
        define('ROUTE_M', $param->route_m());
        define('ROUTE_C', $param->route_c());
        define('ROUTE_A', $param->route_a());
        $this->init();
    }

    /**
     * 调用件事
     */
    private function init() {
        $controller = $this->load_controller();
        if (method_exists($controller, ROUTE_A)) {            
            if (preg_match('/^[_]/i', ROUTE_A)) {
                exit('You are visiting the action is to protect the private action');
            } else {
                call_user_func(array($controller, ROUTE_A));
            }
        } else {
            exit('Action does not exist.');
        }
    }

    /**
     * 加载控制器
     * @param string $filename
     * @param string $m
     * @return obj
     */
    private function load_controller($filename = '', $m = '') {
        if (empty($filename))
            $filename = ROUTE_C;
        if (empty($m))
            $m = ROUTE_M;
        $filepath = PC_PATH . 'modules' . DIRECTORY_SEPARATOR . $m . DIRECTORY_SEPARATOR . $filename . '.php';
        if (file_exists($filepath)) {
            $classname = $filename;
            include $filepath;
            if ($mypath = pc_base::my_path($filepath)) {
                $classname = 'MY_' . $filename;
                include $mypath;
            }
            return new $classname;
        } else {
            exit('Controller does not exist.');
        }
    }

}